/**
 *   自定义 场景对象类
 * 
 * 
*/
class SceneManager {

//第一步   静态定义单例对象
///////////////     
	static instance;
	static getObj(stage){ //形参
		if(!SceneManager.instance){
			SceneManager.instance = new SceneManager(stage) //实参
			return SceneManager.instance
		}
		return SceneManager.instance
	}
////////////////	


//第二步  调用此类时定义一个参数通过传参的方式将舞台赋值给一个  个人(private) 变量 
//////////////
	public constructor(stage) { //形参
		this._stage = stage
	}
//////////////


//第三步
//////////////
	//定义一个个人变量 通过传参定义此为舞台
	private _stage;//舞台
	//定义一个个人变量 方便保存场景   用于删除
	private lastScene = null
//////////////


//第四步 创建场景   定义两个形参   
//				第一个为资源组 groupName  第二个为加载场景类  SceneName
//////////////

/**
 * 	在场景里  
 * 			第一步
 * 				通过try{}catch(e){console(e)} 来搭建主逻辑
 * 
 * 			第二步
 * 				在try{}中
 * 					第一步 
 * 						加载资源
 * 							实例化一个LoadUI对象    loadingView
 * 							将对象添加到舞台
 * 							RES.LoadGroup(groupName,0,loadingView)  
 * 				
 * 
 * 
 * 
*/
	public async loadScene(groupName,SceneName){
		try {
			
		//加载资源
			const loadingView = new LoadingUI(); //对象  显示容器
            this._stage.addChild(loadingView);
            await RES.loadConfig("resource/default.res.json", "resource/");
            await RES.loadGroup(groupName, 0, loadingView);
			if(loadingView && this._stage.contains(loadingView)){
            	this._stage.removeChild(loadingView);
			}

		//加载场景
			// 第一步加载输入的场景  
			//第二步  移除上一个场景c'x'x'x'x'x'x'x'x'x'x'x'x'x'x
			
			//1
			let curScene = new SceneName();
			console.log(SceneName)
			this._stage.addChild(curScene);
			console.log(1111)
			//2
			if("aniSelf" in curScene){
				curScene.aniSelf(()=>{
					console.log("动画结束！")
					//动画执行以后移除以前的场景
					if(this.lastScene && this._stage.contains(this.lastScene)){
						this._stage.removeChild(this.lastScene)
					}
					this.lastScene = curScene;
				})
			}else{
				if(this.lastScene && this._stage.contains(this.lastScene)){
					this._stage.removeChild(this.lastScene)
				}
				this.lastScene = curScene;
			}

        }
        catch (e) {
            console.error(e);
        }
	}
}